package sigec_ead.controle.acompanhamento;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Date;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.swing.JOptionPane;
import sigec_ead.controle.ConexaoJDBC;
import sigec_ead.controle.chamado.ChamadoDAO;
import sigec_ead.controle.usuario.UsuarioDAO;
import sigec_ead.modelo.acompanhamento.Acompanhamento;



/*
 *
 * @author Joeldson
 */
public class AcompanhamentoDAO {

    private UsuarioDAO usuarioDao;
    private ChamadoDAO chamadoDao;
    private Acompanhamento acompanhar;
    private ArrayList<Acompanhamento> result;
    private Acompanhamento acompanhamento;
    private Date data;

     public void adicionarAcompanhamento(Acompanhamento acompanhamento) throws SQLException {

        PreparedStatement ps = null;
        Connection con = null;

        String sql = "INSERT INTO acompanhamento (idchamado,idusuario,descricao,data) VALUES(?,?,?,?)";

        Calendar cal = Calendar.getInstance();
        int day = cal.get(Calendar.DATE);
        int month = cal.get(Calendar.MONTH) + 1;
        int year = cal.get(Calendar.YEAR)- 1900;
        data = new Date(year, month, day);

        try {
            con = ConexaoJDBC.getConexao();
            ps = con.prepareStatement(sql);

            ps.setInt(1,acompanhamento.getChamado().getId());
            ps.setInt(2, acompanhamento.getUsuario().getId());
            ps.setString(3, acompanhamento.getDescricao());
            ps.setDate(4,data);
            ps.execute();

        } finally {
            JOptionPane.showMessageDialog(null, "Acomnhamento aberto com sucesso, iremos atende-lo em breve","SUCESSO", JOptionPane.PLAIN_MESSAGE);
            ps.close();
            con.close();
        }
    }

    //consultando apenas um chamado
    public Acompanhamento consultarAcompanhamento(int idchamado) throws SQLException {

        PreparedStatement ps = null;
        Connection con = null;

        String sql = "SELECT * FROM acompanhamento where idchamado=?";

        try {
            con = ConexaoJDBC.getConexao();
            ps = con.prepareStatement(sql);
            ps.setInt(1, idchamado);

            ResultSet rs = ps.executeQuery();

            usuarioDao = new UsuarioDAO();
            chamadoDao = new ChamadoDAO();

            if(rs.next()){
                acompanhamento = new Acompanhamento();

                acompanhamento.setId(rs.getInt("id"));
                acompanhamento.setChamado(chamadoDao.consultarChamado(rs.getInt("idchamado")));
                acompanhamento.setUsuario(usuarioDao.consultarUsuario(rs.getInt("idusuario")));
                acompanhamento.setDescricao(rs.getString("descricao"));
                acompanhamento.setData(rs.getDate("data"));

                return acompanhamento;
                
            }else{
              return null;
            }
        } finally {
            ps.close();
            con.close();
        }
    }

    //listando todos os chamados
    public List<Acompanhamento> acompanhamentos(int idChamado) throws SQLException {

        PreparedStatement ps = null;
        Connection con = null;

        String sql = "SELECT * FROM acompanhamento where idchamado = ?";

        try {
            con = ConexaoJDBC.getConexao();
            ps = con.prepareStatement(sql);
            ps.setInt(1, idChamado);
            ResultSet rs = ps.executeQuery();

            result = new ArrayList<Acompanhamento>();
            usuarioDao = new UsuarioDAO();
            chamadoDao = new ChamadoDAO();

            while (rs.next()) {
                acompanhamento = new Acompanhamento();

                acompanhamento.setId(rs.getInt("id"));
                acompanhamento.setChamado(chamadoDao.consultarChamado(rs.getInt("idchamado")));
                acompanhamento.setUsuario(usuarioDao.consultarUsuario(rs.getInt("idusuario")));
                acompanhamento.setDescricao(rs.getString("descricao"));
                acompanhamento.setData(rs.getDate("data"));

                result.add(acompanhamento);
            }
        } finally {
            ps.close();
            con.close();
        }
        return result;
    }

}